/**
 *Copyright(c) HNA SYSTEMS Co., LTD
 *
 *@date 2013-7-10
 * 	
 *Original Author: 郑兴(zhengxing)
 *
 *ChangeLog
 *
 */
package com.o2opays.wechat.tool;

import java.io.InputStream;
//import java.util.regex.MatchResult;


/**
 * @author 郑兴(zhengxing)
 *
 */
public class StringUtil {
	/**
	 * <pre>
	 * 字符串为空
	 * </pre>
	 * 
	 * @Auther 郑兴(zhengxing)
	 * @Date 2013-7-10
	 * @return
	 */
	public static boolean isEmpty(String str) {
		return null == str || str.trim().equals("");
	}
	
	/**
	 * <pre>
	 * 字符串不为空
	 * </pre>
	 * 
	 * @Auther 郑兴(zhengxing)
	 * @Date 2013-7-10
	 * @return
	 */
	public static boolean isNotEmpty(String str) {
		return null != str && !str.trim().equals("");
	}
	
	/**
	* JAVA从指定位置开始截取指定长度的字符串
	*
	* @param input 输入字符串
	* @param index 截取位置，左侧第一个字符索引值是1
	* @param count 截取长度
	* @return 截取字符串
	*/
	public static String middle(String input, int index, int count) {
	if (isEmpty(input)) {
	return "";
	}
	count = (count > input.length() - index + 1) ? input.length() - index + 1 :
	count;
	return input.substring(index - 1, index + count - 1);
	}
	/** 
	    * @功能 字符串转字节
	    * @return 字节数组
	    * @throws Exception 
	    */  
	public static byte[] hexToByte(String hex) {
		int len = (hex.length() / 2); // 除以2是因为十六进制比如a1使用两个字符代表一个byte
		byte[] result = new byte[len];
		char[] achar = hex.toCharArray();
		for (int i = 0; i < len; i++) {
			// 乘以2是因为十六进制比如a1使用两个字符代表一个byte,pos代表的是数组的位置
			// 第一个16进制数的起始位置是0第二个是2以此类推
			int pos = i * 2;

			// <<4位就是乘以16 比如说十六进制的"11",在这里也就是1*16|1,而其中的"|"或运算就相当于十进制中的加法运算
			// 如00010000|00000001结果就是00010001
			// 而00010000就有点类似于十进制中10而00000001相当于十进制中的1，与是其中的或运算就相当于是10+1(此处说法可能不太对，)
			result[i] = (byte) (toByte(achar[pos]) << 4 | toByte(achar[pos + 1]));
		}
		return result;
	}
	private static byte toByte(char c) {
		byte b = (byte) "0123456789ABCDEF".indexOf(c);
		return b;
	}
	/** 
	    * @功能 读取流 
	    * @param inStream 
	    * @return 字节数组 
	    * @throws Exception 
	    */  
	   public static byte[] readStream(InputStream inStream) throws Exception {
		   byte[] b=new byte[1024*2]; ;
		   try{
			   int count = 0;  
			    while (count == 0) {  
			        count = inStream.available();  
			    }  
			    b = new byte[count];  
			    inStream.read(b); 
		   }catch(Exception ex){
			   ex.printStackTrace();
		   }
		    return b;   
	   } 
}
